package com.ruoyi.web.controller.youtobe;

import org.apache.poi.util.IOUtils;
import org.apache.poi.util.Units;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.net.URL;
/**
 * @Title:
 * @author: WYJ
 * @date: 2025/11/5
 */
public class ExcelImageUtils {

    /**
     * 从URL下载图片
     */
    public static byte[] downloadImage(String imageUrl) throws Exception {
        try (InputStream inputStream = new URL(imageUrl).openStream()) {
            return IOUtils.toByteArray(inputStream);
        }
    }

    /**
     * 获取图片尺寸
     */
    public static int[] getImageDimensions(byte[] imageData) throws Exception {
        try (ByteArrayInputStream bis = new ByteArrayInputStream(imageData)) {
            BufferedImage image = ImageIO.read(bis);
            if (image != null) {
                return new int[]{image.getWidth(), image.getHeight()};
            }
            throw new Exception("无法读取图片尺寸");
        }
    }

    /**
     * 像素转换为Excel的EMU单位
     * 1 pixel = 9525 EMU
     */
    public static int pixelsToEMU(int pixels) {
        return (int) Math.round(pixels * 9525.0);
    }

    /**
     * 计算适合Excel的行高（点数）
     */
    public static float calculateRowHeight(int imageHeightPixels) {
        // 大约换算：96像素 = 1英寸 = 72点
        return Math.max(80, imageHeightPixels / 96.0f * 72);
    }

    /**
     * 计算适合Excel的列宽（字符数）
     */
    public static int calculateColumnWidth(int imageWidthPixels) {
        // 大约换算：7.5像素 = 1个字符宽度
        return Math.max(15, (int) (imageWidthPixels / 7.5));
    }
}
